package com.jeeplus.netty;

import com.jeeplus.netty.net.MyCustomMessageDecoder;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelPipeline;
import io.netty.channel.socket.SocketChannel;
import io.netty.handler.codec.DelimiterBasedFrameDecoder;
import io.netty.handler.codec.FixedLengthFrameDecoder;
import io.netty.handler.codec.string.StringDecoder;

public class WSServerInitialzer extends ChannelInitializer<SocketChannel> {

    @Override
    protected void initChannel(SocketChannel ch) throws Exception {
        ChannelPipeline pipeline = ch.pipeline();
        ByteBuf delemiter = Unpooled.copiedBuffer(NettyConst.dataEndingFlag);
        //maxLength表示当前解码器可以解码的最大长度。
        //failFast表示如果超过了这个最大长度是否马上抛出异常
        //stripDelimiter表示是否带着换行符一起解析
        //discarding表示当前解析器处于丢弃模式
        //discardedBytes表示已经丢弃的字节

        //解决TCP粘包问题,设置固定长度16字节的解码器
    //    arg0.pipeline().addLast();
//        pipeline.addLast(
//                new DelimiterBasedFrameDecoder(NettyConst.bufferSize, true, true, delemiter),
//                new StringDecoder(),
//                new ChatHandler()
//        );

        //yanruTODO固定长度字节
        pipeline.addLast(
//                new FixedLengthFrameDecoder(16),
//                new DelimiterBasedFrameDecoder(NettyConst.bufferSize, false, true),
                new MyCustomMessageDecoder(),
//                new StringDecoder(),
                new ChatHandler()
        );


        //2020-5-14 改为固定长度解析，结尾分割符 很容易 跟protobuf压缩完的数据冲突！！！如果我用0000分割，但是protobuf分割完毕也很有可能出现0000
//        pipeline.addLast(
//                new FixedLengthFrameDecoder(NettyConst.bufferSize),
//                new StringDecoder(),
//                new ChatHandler()
//        );
        //FixedLengthFrameDecoder
    }

}
